<template>
  <div>
    <el-form ref="deptForm" :model="form" :rules="rules" label-width="120px">
      <el-form-item label="部门名称" prop="name">
        <el-input
          v-model="form.name"
          style="width: 80%"
          placeholder="1-50个字符"
        />
      </el-form-item>
      <el-form-item label="部门编码" prop="code">
        <el-input
          v-model="form.code"
          style="width: 80%"
          placeholder="1-50个字符"
        />
      </el-form-item>
      <el-form-item label="部门负责人" prop="manager">
        <el-select
          v-model="form.manager"
          style="width: 80%"
          placeholder="请选择"
        >
          <!-- <el-option value="1" label="小美丽" />
          <el-option value="2" label="大漂亮" /> -->
          <el-option
            v-for="item in EmloyeesList"
            :key="item.id"
            :value="item.username"
            :label="item.username"
          />
        </el-select>
      </el-form-item>
      <el-form-item label="部门介绍">
        <el-input
          v-model="form.introduce"
          style="width: 80%"
          placeholder="1-300个字符"
          type="textarea"
          :rows="3"
        />
      </el-form-item>
      <el-form-item>
        <el-button type="primary" size="small" @click="hSubmit">确定</el-button>
        <el-button size="small" @click="$emit('close')">取消</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>
<script>

import { getEmployeesSimple } from "@/api/employees";
import {
  addDepartments,
  getDepartmentsDetail,
  updateDepartments,
} from "@/api/departments";
export default {
  props: {
    type: String,
    required: true,
  },
  id: {
    type: Boolean,
    required: true,
  },
  originList:{
    type: Array,
    required: true,
  },

  data() {
    const validCode=(rule,value,callback)=>{
      console.log(value,'value');
      console.log(this.originList,'this.originList');
      const existCodeList=this.originList.map(item=>item.code)
      if(this.isEdit){
        existCodeList=this.originList.filtet(item=item,id !==this.id).map(item=>item .code)
      }
      console.log(existCodeList);
      if(existCodeList.includes(value)){
        callback(new Error(`部门编码:${value}已存在`))
      }else{
        callback()
      }
    },
    //效验部门的名称在同级不能重复
    const validName=(rule,value,callback)=>{
      //计算公式
      console.log(value,'value');
      console.log(this.originList,'this.originLis');
      console.log(this.id) //新增,那么this.id就是父部门的id,作为新增子部门的pid
      let existNameLiset=this.originList.filter(item=>item.pid===this.id).map(item=>item.name)
      if(this.isEdit){
        //所有的部门数据  originList
        //在所有的部门中找到当前编辑部门数据对象{id:'03',pid:'01',name:'税务核酸部门'}
        const curDepartment=this.originList.find(item=>item.id===this.id)
        const pid=curDepartment.pid
        //所有的兄弟部门的pid是一样 找所有的兄弟 包括自己
        const brothers=this.originList.filter(item=>item.pid===pid)
        existNameLiset=brothers.filter(item=>item.id !==this.id).map(item=>item .name)
      }
      console.log(existNameLiset);
      if(existNameLiset.includes(value)){
        //存在
        callback(new Error(`部门名称${value}已存在`))
      }else{
        callback()//放行
      }

    }
    return {
      //收集数据表单的对象
      form: {
        name: "", // 部门名称
        code: "", // 部门编码
        manager: "", // 部门管理者
        introduce: "", // 部门介绍
      },
        rules: {
        name: [
          { required: true, message: '请输入部门名称', trigger: 'blur' },
          { min: 1, max: 50, message: '请输入长度1-50的字符', trigger: 'blur' },
           { validator: validName, trigger: 'blur' }
        ],
        code: [
          { required: true, message: '请输入部门编码', trigger: 'blur' },
          { min: 1, max: 50, message: '请输入长度1-50的字符', trigger: 'blur' },
          { validator: validCode, trigger: 'blur' }
        ],
        introduce: [
          { required: true, message: '请输入部门介绍', trigger: 'blur' },
          { min: 1, max: 300, message: '请输入长度1-300的字符', trigger: 'blur' }
        ],
        manager: [
          { required: true, message: '请输入部门负责人', trigger: ['blur', 'change'] }

        ]

      },
      EmloyeesList: [], //负责人列表
    };
  },
    //解决数据吧更新的方式3,使用watch侦听的变化
  watch:{
'id':function(nweVal,oldVal){
  console.log(nweVal,oldVal);
  console.log('this',this);
  this.loadDepartmentsDetail()
}
  },
  created() {
    this.loadEmployeeSimple();
    if (this.isEdit) {
      this.getDepartmentsDetail();
    }
  },
  methods: {
    //重置表单的效验规则和数据
    reseForm(){
       this.$refs.deptForm.resetFields()
    },
       hSubmit() {
      this.isEdit ? this.doEdit() : this.doAdd();
    },
    //编辑功能
    async doEdit() {
   try  { const res = await updateDepartments(this.form);
      if (res.code !== 10000) return this.$message.error(res.message);
      this.$message.success(res.message);
      this.$emit("success");
      }catch(error){
        console.log(error);
      }
    },
    //获取去部门当前数据
    async loadEmployeeSimple() {
      try {
        const res = await getDepartmentsDetail(this.id);
        console.log(res, "getDepartmentsDetail");
        this.form = res.data;
      } catch (error) {
        console.log(error);
      }
    },
 
    doEdit() {},
    //新增子部门
    async doAdd() {
      try {
        const res = await addDepartments({ ...this.form, pid: this.id });
        console.log(res, "addsss");
        if (res.code !== 10000) return this.$$message.error(res.manager);
        this.$$message.success(res.message);
        //从新渲染列表数据,关闭弹层
        //子传父
        this.$emit("success");
      } catch (error) {
        // console.log(error);
        this.$message.error(error);
      }
    },
    //获取部门负责人数据
    async loadEmployeeSimple() {
      try {
        const res = await getEmployeesSimple();
        console.log(res, "getEmployeesSimple");
        if (re.code === 10000) {
          this.EmloyeesList = res.data;
        }
      } catch (error) {
        console.log(error);
        this.$message.error(error);
      }
    },
    // 确定

    // d兜底效验
    hCancel() {
      this.$refs.deptForm.validator(value=>{
        if(!value) return 
        this.isEdit?this.doEdit():this.doAdd()
      })
    },
  },
};
</script>
